概述
Graphviz 是一个绘图工具集, 可以用 The DOT Language 的 DSL 来绘图。用 dot 写好脚本之后,使用不同的布局引擎来对脚本解析,生成图片,支持 PNG、PDF 等格式。Graphviz 有好几个布局引擎,一般使用的有
dot
(有向图) 和circo
(环形布局),其他的较少使用。
Graphviz
包含 3 种图形元素,图(graph)
,节点(node)
和边(edge)
。每个元素都可以具有各自的属性,用来定义字体,样式,颜色,形状等。
安装
安装
graphviz
程序1
2
3
4
5Mac
brew install graphviz
ubuntu
sudo apt-get install graphviz或者到官网下载页面中, 找到对应平台的安装包安装。
安装
python-graphviz
模块1
sudo pip install graphviz
基本用法
通过实例化对象创建图形
1 | from graphviz import Digraph |
生成的
dot
文件内容1
2
3
4
5
6
7
8
9// this is direction
digraph {
A [label=writer]
B [label=doctor]
C [label=teacher]
A -> B
A -> C
B -> C
}生成的
png
图片字体乱码
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 42: ordinal not in range(128)
1
2
3
4import os, time, sys
if sys.getdefaultencoding() != 'utf-8':
reload(sys)
sys.setdefaultencoding('utf-8')
通过读取 dot 文件创建图形
dot
源文件内容1
2
3
4
5
6
7
8
9// this is direction
digraph {
node [] "Input | NodeA"[style="filled", color=black, fillcolor="chartreuse"] "Split | NodeD" "Conv | NodeB" "Relu | NodeC";
"Input | NodeA" -> "Split | NodeD" [label="input0 1x3x224x224"]
"Split | NodeD" -> "Conv | NodeB" [label="input0_split0 1x3x224x224"];
"Split | NodeD" -> "Relu | NodeC" [label="input0_split1 1x3x224x224"];
"Conv | NodeB" -> "Relu | NodeC" [label="conv1 1x32x112x112"];
}python
示例代码1
2
3
4
5
6from graphviz import Digraph, Source
src = Source.from_file('output-graph-font.gv')
print src.source
src.format = 'png'
src.render('output-graph.gv')生成的
png
图片